**当我尝试更改任何组件的位置时,例如Button
Label
TextField
我的形状的某些部分变得不可见。当我删除我将位置设置为组件的代码时(在这种情况下,它是TextField
)形状变得正常。 **
public class Line {
public static void main(String[] args) {
JFrame frame = new JFrame("JFrame Example");
frame.setSize(1366, 768);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.setVisible(true);
JButton button=new JButton("Show lines");
frame.add(button);
button.setBounds(60, 400, 220, 30);
button.setVisible(true);
JTextField txtf=new JTextField();
frame.add(txtf);
txtf.setVisible(true);
txtf.setSize(50, 100);
button.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent me) {
button.setVisible(false);
Graphics2D grf= (Graphics2D) frame.getGraphics();
txtf.setVisible(false);
txtf.setText("APPLE");
txtf.setLocation(600, 600);
txtf.setVisible(true);
grf.fillOval(600, 600, 10, 10);
grf.fillOval(190, 600, 10, 10);
grf.fillOval(900, 650, 10, 10);
grf.fillOval(750, 160, 10, 10);
grf.fillOval(600, 400, 10, 10);
grf.fillOval(1139, 266, 10, 10);
grf.drawLine(1144, 271, 605, 405);
grf.drawLine(195, 605, 605, 405);
grf.drawLine(755, 165, 605, 405);
grf.drawLine(755, 165, 1144, 271);
grf.drawLine(905, 655, 1144, 271);
grf.drawLine(905, 655, 605, 405);
grf.drawLine(205, 205, 605, 405);
grf.drawLine(205, 205, 755, 165);
}
@Override
public void mousePressed(MouseEvent me) {
}
@Override
public void mouseReleased(MouseEvent me) {
}
@Override
public void mouseEntered(MouseEvent me) {
}
@Override
public void mouseExited(MouseEvent me) {
}
});
button.setVisible(true);
}
}
答案 0 :(得分:1)
当我尝试更改任何compoenet的位置时,例如Button Label TextFielt,我的形状的某些部分变得不可见
你自定义绘画是错的。您不应该使用框架的getGraphics()方法来获取Graphics对象。一旦Swing确定需要重新绘制组件,使用此方法的任何绘画都将丢失。
每当您更改Swing组件的属性时,组件都会重新绘制。因此,您将丢失与上述Graphics对象关联的任何绘制。
相反,您应该覆盖JPanel的install.packages("rgl")
library(rgl)
plot3d(iris[1:3]) # Nothing appears in RStudio plot viewer
plot(cars) # The cars scatterplot appears in my RStudio plot viewer
dev.off()
并将绘制逻辑添加到该方法中。然后将JPanel添加到框架中。
阅读Custom Painting上Swing教程中的部分,了解更多信息和工作示例。下载示例并根据您的实际需求进行自定义。