Тук имам код, който показва суинг прозорец с четири валета върху него. Бих искал да мога да щракам и да местя криковете около прозореца. Знам, че трябва да бъдат преначертани, но не съм сигурен как да го направя.
Как мога да направя така, че потребителят да може да кликне и да премести картите?
package p2test;
import javax.swing.*;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.awt.*;
public class main
{
public static final int PERIMETER_BEVEL = 20; //space between panel border and perimeter cards
public static final int LEFT_PERIMETER_BEVEL = 98;
public static final int INTERIOR_BEVEL = 5; //space between cards
public static final int CARD_HEIGHT = 97;
public static final int CARD_WIDTH = 73;
public static final int PANEL_HEIGHT = (2*PERIMETER_BEVEL) + (4*CARD_HEIGHT) + (3*INTERIOR_BEVEL);
public static final int PANEL_WIDTH = (2*PERIMETER_BEVEL) + (14*CARD_WIDTH) + (13*INTERIOR_BEVEL);
public static final String BACKGROUND_COLOR = "#64C866"; //window background color [hex]
public static final String CARD_FOLDER = "cardImages"; //default folder containing images
public static final String [] RANKS = { "jack"};
public static final ArrayList<String> ranks = new ArrayList<String>(Arrays.asList(RANKS));
public static void main(String[] args)
{
JFrame window = new JFrame("deck");
JPanel panel = new JPanel() {
public void paintComponent(Graphics g) { //find each rank of card in increasing
super.paintComponent(g); //order as specified in the array. All
File[] files = new File(CARD_FOLDER).listFiles(); //ranks appear in the same suit order in
//the filesystem so suits will automatically
//be in order when printing in groups of four
//cards.
int counter = 0;
for(String rank : ranks) {
for(File filename : files) {
if(filename.getName().contains(rank)) {
new ImageIcon(filename.getPath()).paintIcon(this, g,
LEFT_PERIMETER_BEVEL + (counter/4) * (CARD_WIDTH + INTERIOR_BEVEL),
PERIMETER_BEVEL + (3-(counter%4)) * (CARD_HEIGHT + INTERIOR_BEVEL));
counter++;
//counter/4 keeps track of the correct column
//3-(counter%4) keeps track of the correct row
//in which to print the card image
}
}
}
}
};
panel.setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
window.setBackground(Color.decode(BACKGROUND_COLOR));
window.add(panel);
window.setVisible(true);
window.pack();
}
}
paintComponent
, това ще забави вашата програма и ще консумира голямо количество ресурси. Трябва да дефинирате виртуален изглед, с който можете да определите дали даден обект е щракнат или не и да го преместите, като промените позицията му в този изглед и го превърнете в реалност на екрана... Може да намерите Как да напиша слушател на мишката и Как да напиша Mouse-Motion Listener полезно - person MadProgrammer   schedule 04.02.2014JButton
вGridLayout
. Използвам тази техника във въпросите и отговорите за Създаване на стабилен GUI за шах с възможност за промяна на размера и тя значително опростява откриването на щраквания и преместване на предмети - както се вижда в този вариант, който анимира преместването на пешките. - person Andrew Thompson   schedule 04.02.2014paintComponent
метод визуализирате това... - person MadProgrammer   schedule 05.02.2014