2015-10-15 3 views
0

Недавно мне нужно было написать программу для рисования гистограммы, когда я нажимаю подготовленное место. Есть две ситуации будет рисовать графики, один прессовой место в таблице, другой выбор региона (например, Гаосюн или Тайбэй) в typebox enter image description hereГрафика в панели мигает, а затем исчезает

Но я не знаю, почему пресса место в таблица очень понятна, чтобы нарисовать графику на панели, но когда я нажимаю на коробку типов, рисунок будет мигать об исчезновении. Вот какая-то часть моего кода по этому вопросу

public class Google2 extends JFrame implements ActionListener{ 
JPanel panel;//主要畫布 
Graphics g; 
int regnm=0,regns=0,regna=0,regn=0,regp=0;//生氣數量,傷心數量,憂慮數量,其他數量,正面數量 
String[] stype = { "全部", "基隆", "台北", "桃園", "新竹", "苗栗", "台中", "南投", "彰化", "雲林", "嘉義" 
, "台南", "高雄", "屏東", "台東", "花蓮", "宜蘭", "外島", "國外"};//所有地區 
JComboBox typebox = new JComboBox(stype);//下拉式印出地區 
DefaultTableModel tmc = new DefaultTableModel(new Object [][] {},new String [] { "Place","count"});//選地點用model 
JTable jt =new JTable(); 
JScrollPane scrollPane = new JScrollPane(jt);//印出負面地點的滾輪 
public Google2(){ 
    setLocation(450,50); 
    setLayout(null); 
    setVisible(true); 
    setDefaultCloseOperation(EXIT_ON_CLOSE);  
    setSize(1300, 850); 
    typebox.setBounds(125,55,125,30);add(typebox); 
    typebox.addActionListener(this); 
    scrollPane.setBounds(10, 90, 250, 535);add(scrollPane); 
    jt.setModel(tmc);jt.setRowHeight(30); 
    jt.getSelectionModel().addListSelectionListener(//選地點 
    new ListSelectionListener() { 
     public void valueChanged(ListSelectionEvent event) { 
      if(!event.getValueIsAdjusting()){ 
       if(jt.getSelectedRow()>-1){ 
        Draw(); 
       }          
      } 
     } 
    });  
} 
public void actionPerformed(ActionEvent e){ 
    if(e.getSource()==typebox){ 
     Draw(); 
    } 
} 
void Draw(){ 
     g.setColor(WHITE); 
     g.fillRect(0, 0, 379, 329); 
     g.setColor(BLACK); 
     float lineWidth = 6.0f; 
     ((Graphics2D)g).setStroke(new BasicStroke(lineWidth)); 
     g.drawRect(0, 0, 380, 330); 
     g.setFont(font1); 
     g.drawString("生氣", 30, 300); 
     g.drawString("傷心", 100, 300); 
     g.drawString("憂慮", 170, 300); 
     g.drawString("其他", 240, 300); 
     g.drawString("正面", 310, 300); 
     g.setColor(RED); 
     if(regnm>0){ 
      int md=25; 
      md=md*regnm; 
      if(md>250) 
       md=250; 
      g.fillRect(35, 275-md, 35, md); 
     }    
     g.setColor(ORANGE); 
     if(regns>0){ 
      int md=25; 
      md=md*regns; 
      if(md>250) 
       md=250; 
      g.fillRect(105, 275-md, 35, md); 
     } 
     g.setColor(Color.magenta); 
     if(regna>0){ 
      int md=25; 
      md=md*regna; 
      if(md>250) 
       md=250; 
      g.fillRect(175, 275-md, 35, md); 
     } 
     g.setColor(Color.CYAN); 
     if(regn>0){ 
      int md=25; 
      md=md*regn; 
      if(md>250) 
       md=250; 
      g.fillRect(245, 275-md, 35, md); 
     } 
     g.setColor(BLUE); 
     if(regp>0){ 
      int md=25; 
      md=md*regp; 
      if(md>250) 
       md=250; 
      g.fillRect(315, 275-md, 35, md); 
     } 
     regnm=0;regns=0;regna=0;regn=0;regp=0;  
} 
//main function 
public static void main(String[] args) throws Exception{ 
    Google2 gg = new Google2(); 
} 
} 

Я пытался много методов, как перекрашивать, обновление не может быть решено, есть все еще можно рисовать, когда я нажимаю таблицу, но неспособный рисунок, когда я нажимаю typebox Я надеюсь, что кто-то может мне помочь, спасибо

ответ

0

Это не то, как нужно рисовать в Swing. Начните с обзора Painting in AWT and Swing и Performing Custom Painting для получения более подробной информации о том, как следует делать рисунки.

В принципе, вы хотите, чтобы переопределить paintComponent метод компонента, простирающейся от чего-то вроде JComponent (JPanel, как правило, предпочтительнее) и выполнять то, что когда-либо пользовательские картины вы хотите/должны выполнять там, не забудьте позвонить super.paintComponent, прежде чем сделать вас собственный заказ.

Избегайте использования макетов null, идеальные макеты пикселей являются иллюзией в современном дизайне ui. Слишком много факторов, которые влияют на индивидуальный размер компонентов, ни один из которых вы не можете контролировать. Swing был разработан для работы с менеджерами компоновки в ядре, отбросив их, не будет конца проблем и проблем, которые вы будете тратить все больше времени на исправление.

Смежные вопросы