Печать в Java

  • Автор темы Guest
  • Дата начала
G

Guest

#1
Берем этот код, сохраняем в отдельном файле, затем, вызываем статический метод PrintUtilities.printComponent(p3); который принимает компонент (обозначен p3) в виде параметра, который и распечатывается. В моем коде на форму кладется компонент Panel (все происходит в среде NetBeans), в окошке (компонент Panel принимает на форме вид окошка) рисуется картинка и вопрос такой: что нужно передать в статический метод из примера приведенной ссылки в виде параметра, чтобы распечатался рисунок? У меня печатается сама форма с кнопками, и с окошком, но окошко пустое, сам рисунок не печатается.
 

Kmet

Java Team
25.05.2006
1 036
8
#2
свой код приведи, я вообще хз, что там нетбинс может нагенерить. и delphi-style developming плохо сочитается с явой вообще и свингом в частности.
 
G

Guest

#3
// Обработчик нажатия кнопки.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

double[]d={159.5,169.5,155.5,164.5,173.0,158.5,173.5,165.5,161.5,166.5,
152.0,166.0,163.0,167.0,157.5,167.5,162.0,164.5,169.0,160.5,170.5,162.5,
164.0,171.5,153.5,170.5,165.5,163.0,163.0,166.5,158.0,165.0,168.0,169.5,
164.5,169.0,156.0,167.0,163.5,169.5,157.5,171.0,161.5,173.0,165.5,156.5,
172.0,162.5,174.0,159.0,170.0,161.5,166.5,154.0,168.5,162.5,174.5,160.0,
177.0,164.0,165.0,158.5,166.0,167.0,160.0,168.5,162.5,163.5,167.5,157.0,
172.5,164.5,160.0,175.0,166.0,161.0,170.5,162.5,174.5,161.0,167.5,165.0,
153.0,169.0,163.5,162.0,161.0,167.0,171.0,156.5,164.5,169.0,159.5,168.0,
166.0,156.0,166.5,168.0,160.5,168.5};

double[]v={1595,1695,1555,1645,1730,1585,1735,1655,1615,1665,1520,1660,1630,
1670,1575,1675,1620,1645,1690,1605,1705,1625,1640,1715,1535,1705,1655,1630,
1630,1665,1580,1650,1680,1695,1645,1690,1560,1670,1635,1695,1575,1710,1615,
1730,1655,1565,1720,1625,1740,1590,1700,1615,1665,1540,1685,1625,1745,1600,
1770,1640,1650,1585,1660,1670,1600,1685,1625,1635,1675,1570,1725,1645,1600,
1750,1660,1610,1705,1625,1745,1610,1675,1650,1530,1690,1635,1620,1610,1670,
1710,1565,1645,1690,1595,1680,1660,1560,1665,1680,1605,1685};

Consider.selaver(d); // Считает выборочное среднее.
Consider.seldisp(d); // Считает выборочную дисперсию.
Consider.corseldisp(d); // Исправленная дисперсия.
Consider.corfactor(d, v); // Коэффициент корреляции.

Consider.selaver(v);
Consider.seldisp(v);
Consider.corseldisp(v);
Consider.corfactor(v, d);

Axes ax=new Axes(jPanel1.getGraphics(), jPanel1.getBackground()); // Конструктор координатных осей.
ax.show(); // Рисует оси координат на jPanel.
Histogram ht=new Histogram(jPanel1.getGraphics(), jPanel1.getBackground(), d); // Конструктор гистограммы.
ht.show(); // Рисует гистограмму на jPanel.
}
 

Kmet

Java Team
25.05.2006
1 036
8
#4
смотрим сюда

Код:
m ht=new Histogram(jPanel1.getGraphics(), jPanel1.getBackground(), d); // Конструктор гистограммы.
ht.show(); // Рисует гистограмму на jPanel.
потом сюда

Код:
public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
if (pageIndex > 0) {
return(NO_SUCH_PAGE);
} else {
Graphics2D g2d = (Graphics2D)g;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
disableDoubleBuffering(componentToBePrinted);
componentToBePrinted.[b]paint(g2d);[/b]
enableDoubleBuffering(componentToBePrinted);
return(PAGE_EXISTS);
}
}
думаем, при необходимости повторяем.
 
G

Guest

#5
При необходимости повторяем, что? "Думаем"? Бесконечный цикл получается, а хотелось бы просто распечатать нарисованное. :D
 

Kmet

Java Team
25.05.2006
1 036
8
#6
мало повторяли,

Axes ax=new Axes(jPanel1.getGraphics(), jPanel1.getBackground()); // Конструктор координатных осей.
ax.show(); // Рисует оси координат на jPanel.
Histogram ht=new Histogram(jPanel1.getGraphics(), jPanel1.getBackground(), d); // Конструктор гистограммы.
ht.show(); // Рисует гистограмму на jPanel.
вызывать надо в paint(), а не где попало
 
G

Guest

#7
Слушай! Что-то я тебя не пойму. Что значит где попало? И причем тут paint()? И как он (paint()) относится к цитируемому тобой коду в последнем комменте? Я ж говорю, все рисуется в jPanel, автор кода, ссылку на который я дал в первом комменте, утверждает, что передав графический компонент в виде параметра в функцию PrintUtilities.printComponent() он (компонент) должен распечататься. jPanel графический компонент (и то, что в нем намалевано), следовательно, должен распечатываться, а он не распечатывается. Если знаешь что нужно делать - скажи конкретно, пространные рассуждения мне дилетанту не понятны.
P.S. И все-таки к выводу на принтер ближе категория printing, а не painting (это я по поводу paint()).
 

Kmet

Java Team
25.05.2006
1 036
8
#8
автор кода, ссылку на который я дал в первом комменте, утверждает, что передав графический компонент в виде параметра в функцию PrintUtilities.printComponent() он (компонент) должен распечататься. jPanel графический компонент (и то, что в нем намалевано), следовательно, должен распечатываться, а он не распечатывается.
автор кода предполает, что человек, который будет использовать его код, знаком с архитектурой свинга и знает как правильно делать кастомную отрисовку. а вот к кастомной отрисове paint(), paintComponent() и тд имеют самое не посредственное значение
 
G

Guest

#9
Я не знаю, поэтому-то и интересуюсь. Можешь продемонстрировать в коде? А то я что-то не вгоню, что нужно и где поменять.
 

Kmet

Java Team
25.05.2006
1 036
8
#10
я уже сказал, переопредели paint() или paintComponent() и отрисовывай там все что хошь. googele it: swing custom painting
 
G

Guest

#11
Говорят: ясность мыслей - четкость изложения. Что-то пока не встречал на этом форуме ни того, ни другого .
 

Kmet

Java Team
25.05.2006
1 036
8
#12
если вам что то не понятно, это еще не значит, что плохо объясняют...
 
G

Guest

#13
Не смеши меня! Сам понимаешь о чем говоришь? "переопредели paint() или paintComponent()" - фраза которая говорит сама за себя. Порой, сказать не знаю, полезней, да и честней, чем вводить в блуд.