【发布时间】:2016-07-19 17:11:00
【问题描述】:
我有一个正在运行的桌面应用程序。我有一个 JPanel,其中图像作为背景,其中有两个按钮和一个 JScrollPane,如图 Frame with JPanel 所示。我有一个函数 (showLabel()),当 JScrollPane 结束时,添加带有透明图像的 JLabel 并消失几秒钟。问题是当你添加 JLabel. JLabel bad 显示如图Bad shows 所示。你能帮我解决我的问题吗?
public class MainWindow {
private JFrame frame;
private PanelPopis panelPopis = new PanelPopis(this);
private MyPaint myPaint;
public MainWindow {
setWindow():
BufferedImage image1 = ImageIO.read(getClass().getClassLoader().getResource("poz.png"));
this.myPaint = new MyPaint(image1);
this.frame.add(myPaint);
this.myPaint.add(panelPopis.setPanel());
}
private void setWindow() {
this.frame = new JFrame("DD");
this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.frame.setSize(400, 680);
this.frame.setResizable(false);
this.frame.setLocationRelativeTo(null);
}
private void showLabel(){
JLabel label = new JLabel();
label.setIcon(new ImageIcon(new ImageIcon(getClass().getClassLoader().getResource("postEn.png")).getImage().getScaledInstance(395, 653, Image.SCALE_DEFAULT)));
label.setBackground(new Color(0, 0, 0, 10));
label.setOpaque(true);
this.frame.invalidate();
this.frame.add(label);
this.frame.revalidate();
int delay2 = 3000; // milliseconds
ActionListener taskPerformer2 = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
frame.remove(label);
frame.revalidate();
frame.repaint();
}
};
Timer myTimer2 = new Timer(delay2, taskPerformer2);
myTimer2.setRepeats(false);
myTimer2.start();
}
}
public class MyPaint extends JPanel {
private static final long serialVersionUID = 1L;
BufferedImage image;
public MyPaint(BufferedImage image) {
setOpaque(false);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, 395, 653, this);
}
}
public class PanelPopis extends JPanel {
private static final long serialVersionUID = 7676683627217636485L;
private JButton setLanguage;
private JButton cont;
private JScrollPane scrolPanel;
private JTextArea popis;
private MainWindow mainWindow;
public PanelPopis(MainWindow mainWindow) {
this.mainWindow = mainWindow;
}
public JPanel setPanel() {
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setOpaque(false);
JPanel panel2 = new JPanel();
Border border = panel2.getBorder();
Border margin = new EmptyBorder(0, 0, 4, 0);
panel2.setBorder(new CompoundBorder(border, margin));
panel2.setOpaque(false);
panel2.add(this.scrolPanel = new JScrollPane(popis));
panel.add(this.setLanguage = new JButton("language settings"), BorderLayout.NORTH);
panel.add(this.cont = new JButton("CONTINUE"), BorderLayout.SOUTH);
panel.add(panel2, BorderLayout.CENTER);
return panel;
}
}
【问题讨论】:
-
1) 为了尽快获得更好的帮助,请发帖 minimal reproducible example 或 Short, Self Contained, Correct Example。 2) 例如,获取图像的一种方法是热链接到在this Q&A 中看到的图像。
-
你在 MyPaint 中还有一些其他的东西——在照片上放一张简单的照片不会是一件严肃的事情——显示完整的代码
-
@gpasch “显示完整代码” 不同意。 MCVE 将是最最佳的代码形式。请注意,评论中的
[mcve]将自动扩展为minimal reproducible example。 Branislav Pažický - 请不要将代码放在基本上不可读的注释中。它应该作为编辑包含在问题中。 -
对不起,我改了。
-
1) 提示:添加@gpasch(或任何重要的
@)以通知此人有新评论。 2) 请参阅Detection/fix for the hanging close bracket of a code block 了解我无法再费心修复的问题。但还要注意 a) 不同的代码部分将“一起运行”,除非它们之间有“无代码格式化”部分。我通常使用类的名称作为标题——这样就可以了。 b) 但是要制作正确的 MCVE,它应该只是一个复制/粘贴。这可以通过离开来实现。..