gpt4 book ai didi

Java:从不同的类绘制到 JPanel

转载 作者:行者123 更新时间:2023-12-02 08:52:03 28 4
gpt4 key购买 nike

我有一个小问题 - 如何从其他类/文件/方法中重新绘制主类中的 JPanel?

故事是,我有一个 Swing 窗口,其中有一个方法列表,这些方法是通过浏览文件夹中的文件和类并读取方法及其描述(注释)自动生成的。现在,问题是,当出现一个类时,其中一个方法需要使用圆圈和线条来绘制太阳,那么我怎样才能让它显示在主窗口中?

我环顾四周(阅读:谷歌搜索),发现 JPanel 应该很方便,但是从另一个类和方法在其上绘画,而不知道他们的名字是什么以及他们何时使用创建的绘画。 .困难。

我还添加了 main 方法,如果有任何用处的话..

static int indez = 0;
protected static JList list;
static boolean valitud = false;
public static JTextArea txtala;
public static JScrollPane scrl;
public static JPanel pilt;
static Map<Integer, String[]> info = new TreeMap<Integer, String[]>();
static ArrayList<Integer> nrs = new ArrayList<Integer>();
public static void main(String[] args){
Iterator<Entry<Integer, String[]>> iterator;
Entry<Integer, String[]> entry;
Integer val = 0;

JFrame f = new JFrame("Praktikumid");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(750, 350);

JPanel panel = new JPanel();
pilt = new JPanel(){public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawString("This is my custom Panel!", 10, 20);
}};

pilt.setVisible(false);
pilt.setPreferredSize(new Dimension(f.getWidth() - 200, f.getHeight() - 20));
pilt.setBackground(Color.GRAY);

GroupLayout layout = new GroupLayout(panel);
panel.setLayout(layout);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);

ActionListener kuular = new ActionListener() {
public void actionPerformed(ActionEvent tegu) {
valitud = true;
try {
praxStarter();
} catch (Exception e) {
e.printStackTrace();
}
}
};

MouseListener hiir = new MouseListener() {
public void mouseClicked(MouseEvent e) {
indez = list.getSelectedIndex();
}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
};

JLabel kiri = new JLabel("Vali hiirega ja vajuta nupule");

ArrayList<String> selections = new ArrayList<String>();

// Iterating over all the items in another method to get the modules

list = new JList(selections.toArray());
list.setSelectedIndex(0);
list.addMouseListener(hiir);

JScrollPane listScroller = new JScrollPane(list, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
listScroller.setMinimumSize(new Dimension(200, 50));
listScroller.setMaximumSize(new Dimension(200, f.getHeight() * 1000));

JButton button = new JButton("Vali");
button.setActionCommand(Integer.toString(list.getSelectedIndex()));
button.addActionListener(kuular);

Font font = new Font("Arial", Font.PLAIN, 12);
txtala = new JTextArea("<-- Vali sealt");
txtala.setEditable(false);
txtala.setMargin(new Insets(5, 8, 0, 0));
txtala.setFont(font);
scrl = new JScrollPane(txtala, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrl.setPreferredSize(new Dimension(f.getWidth() - 200, f.getHeight() - 20));

pilt.setBackground(Color.PINK);
pilt.setVisible(false);
pilt.setPreferredSize(new Dimension(f.getWidth() - 200, f.getHeight() - 20));

GroupLayout.ParallelGroup menu = layout.createParallelGroup();
GroupLayout.SequentialGroup row = layout.createSequentialGroup();
GroupLayout.SequentialGroup leftright = layout.createSequentialGroup();
GroupLayout.ParallelGroup topdown = layout.createParallelGroup();
GroupLayout.ParallelGroup dbl = layout.createParallelGroup();
GroupLayout.ParallelGroup dblrow = layout.createParallelGroup();

menu.addComponent(kiri);
menu.addComponent(listScroller);
menu.addComponent(button);
leftright.addGroup(menu);
dbl.addComponent(scrl);
dbl.addComponent(pilt);
leftright.addGroup(dbl);

row.addComponent(kiri);
row.addComponent(listScroller);
row.addComponent(button);
topdown.addGroup(row);
dblrow.addComponent(scrl);
dblrow.addComponent(pilt);
topdown.addGroup(dblrow);

layout.setHorizontalGroup(leftright);
layout.setVerticalGroup(topdown);

panel.setComponentZOrder(pilt, 1);
panel.setComponentZOrder(scrl, 0);

f.add(panel);
//f.pack();
f.setVisible(true);
}

public static void praxStarter() throws Exception{
// As a note - nrs is the holder for menu indexes
// info is a Map of those same menu items
// And one entry in info is in the form of String[]{name, class.method}
String[] tekst = new String[2];
String kls, met;
Method meetod;

txtala.setText("");

tekst = info.get(nrs.get(indez));
kls = tekst[1].substring(0, tekst[1].indexOf("."));
met = tekst[1].substring(tekst[1].indexOf(".") + 1, tekst[1].length());

meetod = Class.forName(kls).getMethod(met);
meetod.setAccessible(true);
meetod.invoke(Class.forName(kls).newInstance());
}

此外,这里还有一个类绘图(或尝试绘图)的示例:

public class brush extends Applet {
public void paint(Graphics g) {
int x0 = 150;
int y0 = 150;
int r = 100;
int x, y;
double t;

int w = getWidth();
int h = getHeight();

x0 = w / 2;
y0 = h / 2;

g.setColor(Color.white);
g.fillRect(0, 0, w, h);

g.setColor(Color.black);

for (t = -Math.PI; t < Math.PI; t = t + Math.PI / 16) {
x = (int) (r * Math.cos(t) + x0);
y = (int) (r * Math.sin(t) + y0);
g.drawLine(x0, y0, x, y);
}
}
}

感谢您的回答和建议!

编辑:这是一个屏幕截图: Screenshots

左侧是常规的屏幕打印文本模块。右侧是隐藏的文本部分,并显示 JPanel,其中 JPanel 是从 pilt = new JPanel() 部分绘制的,但在主类之外没有任何其他成功的编辑。

编辑:我尝试以多种方式绘制,尝试搜索出现的解决方案,例如

`txtala.setVisible(false);
scrl.setVisible(false);
pilt.setBorder(BorderFactory.createLineBorder(Color.BLACK));
pilt.setVisible(true);
//bi = new BufferedImage(pilt.getWidth() + 1000, pilt.getHeight() + 1000, BufferedImage.TYPE_INT_ARGB);
Graphics g = pilt.getGraphics();
g.setColor(Color.black);
g.drawLine(0, 0, 1000, 1000);
g.drawString("OLOLOLOLO!", 30, 50);
pilt.paint(g);
pilt.update(g);
//g.dispose();
//repaint();`

最佳答案

好吧,所以我走了简单的路。我没有在主窗口中使用相同的 Pane ,而是创建了一个新的弹出窗口并将框架放入其中。我知道,这不是最好的解决方案,但是干草,总比没有好。如果我设法找到一种没有弹出窗口的方法,那么我会将其发布在这里。在那之前,祝大家好运!

关于Java:从不同的类绘制到 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13624361/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com