所以我试图通过创建一个对象并将其添加到JFrame来单击鼠标时绘制一个矩形.但是一旦命令运行它就不会出现.有什么想法吗?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Gui3 extends JFrame {
private JPanel mousepanel;
private JLabel statusbar;
public Gui3(){
super("The title");
mousepanel = new JPanel();
mousepanel.setBackground(Color.WHITE);
add(mousepanel, BorderLayout.CENTER);
statusbar = new JLabel("Default");
add(statusbar, BorderLayout.SOUTH);
HandlerClass handler = new HandlerClass();
mousepanel.addMouseListener(handler);
mousepanel.addMouseMotionListener(handler);
}
private class HandlerClass implements MouseListener, MouseMotionListener
{
Run Code Online (Sandbox Code Playgroud)
这就是问题出现的地方.程序及其所有方法都有效,它只是绘制了问题的矩形.绘制形状的对象如下.
public void mouseClicked(MouseEvent event) {
statusbar.setText(String.format("Clicked at %d,%d",event.getX(),event.getY()));
DrawShapes shapes = new DrawShapes();
add(shapes);
}
public void mousePressed(MouseEvent event){
statusbar.setText("You pressed down the mouse");
}
public void mouseReleased(MouseEvent …Run Code Online (Sandbox Code Playgroud) 一切都有效,除了列表没有出现在JFrame上.我不明白为什么我不能在没有声明新布局的情况下添加内容.
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.*;
public class Gui3 extends JFrame {
private JPanel mousepanel;
private JLabel statusbar;
private JList list;
private static String[] colornames = {"black","blue","red","white"};
private static Color[] colors = {Color.BLACK, Color.BLUE,Color.RED,Color.WHITE};
public Gui3(){
super("The title");
list = new JList(colornames);
list.setVisibleRowCount(4);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setFixedCellHeight(15);
list.setFixedCellWidth(100);
add(new JScrollPane(list));
list.addListSelectionListener(
new ListSelectionListener(){
public void valueChanged(ListSelectionEvent event){
Run Code Online (Sandbox Code Playgroud)
用户应该能够从列表中选择背景颜色,然后程序应该将背景更改为该颜色.但是不是......
mousepanel.setBackground(colors[list.getSelectedIndex()]);
}
}
);
mousepanel = new JPanel();
mousepanel.setBackground(Color.WHITE);
add(mousepanel, BorderLayout.CENTER);
statusbar = new JLabel("Default");
add(statusbar, BorderLayout.SOUTH);
HandlerClass handler …Run Code Online (Sandbox Code Playgroud) 似乎每当我尝试创建一个程序时,我总是最终使用setLayout(null);Java中的命令,因为我喜欢绝对定位我正在放置在我的swing组件上的任何东西.从我读到的每个人都一直在说使用布局管理器来简化编码过程,但它如何简化它?平台系统之间的绝对定位会产生什么问题?