繁体   English   中英

面板中的图形先闪烁然后消失

[英]Graphic in Panel flashed and then disappear

最近,我需要编写一个程序来在按下准备好的位置时绘制条形图。 有两种情况会绘制图形,一种是按表格中的位置,另一种是在类型框中选择区域(例如高雄或台北)在此处输入图像说明

但是我不知道为什么按表格中的位置很清楚就可以在面板上绘制图形,但是当我按打字机时,绘图会消失。 这是我有关此问题的代码的一部分

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();
}
}

我尝试了很多方法,例如重画,更新无法解决,按表格时仍然可以绘图,但按打字机时却无法绘图,希望有人能帮帮我,谢谢

这不是在Swing中进行绘画的方式。 首先查看AWT中的绘画和Swing执行自定义绘画,以获取有关应如何绘画的更多详细信息。

基本上,您想覆盖从类似JComponent的组件扩展的paintComponent方法(通常首选JPanel )并执行您想要/需要在其中执行的自定义绘画,请记住在拥有自定义super.paintComponent之前调用super.paintComponent绘画。

避免使用null布局,像素完美布局是现代ui设计中的一种幻觉。 有太多因素会影响组件的单个大小,您无法控制。 Swing旨在与布局经理为核心一起工作,舍弃这些问题不会导致问题和问题的终结,您将花费越来越多的时间来尝试纠正

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM