작은 질문이 있습니다. 다른 클래스/파일/메소드의 메인 클래스에서 JPanel을 어떻게 다시 칠할 수 있습니까?Java : 다른 클래스의 JPanel에 페인팅
이야기는, 폴더의 파일과 클래스를 살펴보고 설명 (주석)을 사용하여 메서드를 읽음으로써 자동으로 생성되는 메서드 목록이있는 스윙 창을 가지고 있다는 이야기입니다. 이제, 한 가지 방법으로 페인팅해야하는 클래스가 생기면 원과 선을 사용하는 태양을 가정 해 봅시다. 그런 다음 어떻게하면 기본 창에 표시 할 수 있습니까?
JPanel은 편리해야하지만 다른 클래스 및 메소드에서 페인팅을해야하며, 이름이 무엇인지 알지 못하고 언제 페인팅을 사용할 것인지 알지 못했습니다. .. 어려움.
그 어떤 유용 할 것입니다 경우에 나는 또한, 주요 방법을 추가하고있어 ..
또한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);
}
}
}
미리 답변 해 주셔서 감사합니다.
편집 : 왼쪽에
일반, 인쇄 텍스트 화면 모듈 : 여기 스크린 샷입니다. 오른쪽에는 텍스트 부분이 숨겨져 있고 JPanel은 pilt = new JPanel()
부분에서 그려진 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();`
'meetod.invoke (...) '로 호출 할 수있는 메소드가 페인트 할 수 있어야한다는 것을 의미합니까? – denisw
글쎄요, 일종의, meetod.invoke는 메소드를 호출하는 것입니다 .. – Thara
정확히 무엇을 달성하기를 원하는지 전혀 명확하지 않습니다. 어쩌면 당신은 당신이 가지고있는 UI의 이미지를 게시 할 수 있습니까? 어쩌면 이렇게하면 원하는 동작을 명확하게 만들 수 있습니다. – denisw