Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #32557

Re: JPanel and paintComponent different results between Windows/Linux

From Jeff Higgins <jeff@invalid.invalid>
Newsgroups comp.lang.java.programmer
Subject Re: JPanel and paintComponent different results between Windows/Linux
Date 2015-09-07 22:41 -0400
Organization A noiseless patient Spider
Message-ID <mslhs2$fj8$1@dont-email.me> (permalink)
References <64b2edb0-379c-4e60-b985-891d9c0a320c@googlegroups.com> <msld73$969$1@dont-email.me>

Show all headers | View raw


On 09/07/2015 09:21 PM, Jeff Higgins wrote:
> On 09/07/2015 08:27 PM, Dark Mornings wrote:
>> Hello. I have a small program that displays a bar graph of 5 bars of
>> varying lengths. The bars display in Windows but not in Linux. I used
>> NetBeans 8/JDK 1.8 to compile the code in Windows and OpenJDK in
>> Ubuntu 14.04. I know paintComponent() is called because I inserted a
>> println() statement into the body of the do-while loop and saw the
>> output. It seems paintComponent() is called 3 times.
>>
>> Why does the my program work in Windows but not in Linux?
>>
>
> You have code that needs to run on the AWT event thread;
>
> public static void main(String args[]) {
>      SwingUtilities.invokeLater(new Runnable() {
>        public void run() {
>          new BarGraph(); // or however you want to arrange it.
>        }
>      });
>
> You should handle your InputDialog cancel option.
>

import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class BarGraph {

   JFrame frame = new JFrame();
   GraphPattern graphPanel = new GraphPattern();

   private void getUserInput() {
     String inp = JOptionPane.showInputDialog(
         "Enter 5 decimal digits separated by spaces:");
     if(inp == null || inp == "") {
       System.exit(1);
     }
     String[] nDigits = inp.split(" ");
     List<Integer> bars = new ArrayList<Integer>();
     for(String s : nDigits) {
       try {
         Integer b = Integer.parseInt(s);
         if(b < 0 || b > 9) {
           throw new NumberFormatException(); }
         bars.add(b);
       } catch (NumberFormatException e) {}
     }
     graphPanel.setBars(bars);
     display();
   }

   private void display() {
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.add(graphPanel);
     frame.setSize(500, 500);
     frame.setTitle("Bar Graph");
     frame.setVisible(true);
   }

   public static void main(String args[]) {
     SwingUtilities.invokeLater(new Runnable() {
       public void run() {
         new BarGraph().getUserInput();
       }
     });
   }
}

import java.awt.Color;
import java.awt.Graphics;
import java.util.List;

import javax.swing.JPanel;

@SuppressWarnings("serial")
public class GraphPattern extends JPanel {
   private static int nStartX = 20;
   private static int nStartY = 20;
   private static final int nHeight = 50;
   private static final int nWidth = 12;
   private static final int nGap = 5;

   private List<Integer> bars;

   public void setBars(List<Integer> data) {
     if(data.size() > 5) {
       bars = data.subList(0, 5);
     } else {
       bars = data;
     }
   }

   public void paintComponent(Graphics gr) {
     super.paintComponent(gr); // set up canvas for drawing
     gr.setColor(Color.green);
     for (int b : bars) {
       gr.fillRect(nStartX, nStartY, nWidth * b, nHeight);
       nStartY += (nHeight + nGap);
     }
   }
}

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

JPanel and paintComponent different results between Windows/Linux Dark Mornings <pwong18@gmail.com> - 2015-09-07 17:27 -0700
  Re: JPanel and paintComponent different results between Windows/Linux Jeff Higgins <jeff@invalid.invalid> - 2015-09-07 21:21 -0400
    Re: JPanel and paintComponent different results between Windows/Linux Jeff Higgins <jeff@invalid.invalid> - 2015-09-07 22:41 -0400
    Re: JPanel and paintComponent different results between Windows/Linux Nigel Wade <nmw@ion.le.ac.uk> - 2015-09-08 14:37 +0100
      Re: JPanel and paintComponent different results between Windows/Linux Jeff Higgins <jeff@invalid.invalid> - 2015-09-08 23:04 -0400

csiph-web